# -*- coding: latin-1 -*-
# esempio di uso di full screen interface con layout relativo
# e due oggetti di tipo ListView uno dei quali viene 
# modificato durante l'esecuzione 
import android


# importante:
# come unita' di misura usare sp per i font e dp per tutto il resto
# se si usa il weight porre la dimensione corripondente a 0dp
# fill_parent e' deprecato dalle api 8, bisognerebbe usare match_parent 
# capire come mai funziona visualizza male nel mio samsung s 

# la variabile droid fornisce l'accesso alle API
# e per semplicita' viene dichiarata globale
droid=android.Android()


def main():
  # valore iniziale contatori e lista incrementi
  iniziale=0;
  incrementi1 = [1,2,3,5,8,13,21,34,55,89,144, 233, 377, 610, 987, 1597]
  incrementi2 = [-1,-5,-10,-50,-100,-500,-1000,-5000]
  # inizializzazione full screen utilizzando il layout xml definito sotto
  droid.fullShow(layout)
  # inizializziamo la lista positivi/negativi
  droid.fullSetList("posneg",["Positivi","Negativi"])
  # gestiamo gli eventi
  eventloop(iniziale,incrementi1,incrementi2)
  # fine: eliminiamo lo schermo
  droid.fullDismiss()


# questo loop gestisce i click sulle varie zone dello schermo 
# aggiornando il contatore
def eventloop(c,lista1,lista2):
  # scrittura valore iniziali nel campo contatore
  droid.fullSetProperty("contatore","text","Contatore: %d" % c)
  while True:
    event=droid.eventWait().result
    print event
    # --- gestisce bottoni
    if event["name"]=="click":
      id=event["data"]["id"]
      if id=="but_esci":
        return
      elif id=="but_minus":
        c -= 1
      elif id=="but_plus":
        c += 1
    # --- gestisce selezioni dentro le liste 
    elif event["name"]=="itemclick":
      if event["data"]["id"]=="posneg":
        if event["data"]["position"]=="0":
          # visualizza e usa gli incrementi di lista1
          droid.fullSetList("incrementi",map(lambda x: "%+d"%x,lista1))
          cur_list = lista1
        else:
          # visualizza e usa gli incrementi di lista2
          droid.fullSetList("incrementi",map(lambda x: "%+d"%x,lista2))
          cur_list = lista2
      elif event["data"]["id"]=="incrementi":   
        pos = int(event["data"]["position"])
        c+= cur_list[pos]
    # --- gestisce tasti   
    elif event["name"]=="key":
      return   # exit on any key pressed
    # refresh contatore
    droid.fullSetProperty("contatore","text","Contatore: %d" % c)
  return


# questa stringa xml definisce il layout dello schermo
# il layout ora e' relativo nel senso che la posizione
# degli oggetti e' data in funzione di quelli gia' piazzati
layout="""<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#ff314859">
  <TextView
    android:id="@+id/contatore"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:text="Inizializzazione ..."
    android:textSize="40sp"
    android:textColor="#ffffff00"
  />
  <LinearLayout
    android:id="@+id/elementi"
    android:layout_below="@id/contatore"
    android:layout_width="fill_parent"
    android:layout_height="200dp"
    android:orientation="horizontal">
      <ListView
        android:id="@+id/posneg"
        android:layout_below="@id/contatore"
        android:layout_width="0dp"
        android:layout_weight="3"
        android:layout_height="fill_parent"
      />
      <ListView
        android:id="@+id/incrementi"
        android:layout_below="@id/contatore"
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="fill_parent"
      />
  </LinearLayout>
  <TextView
    android:id="@+id/inutile"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/elementi"
    android:text="Testo inutile sotto le ListView"
    android:textSize="20sp"
    android:background="#66ffa3d2"
    android:textColor="#ffffff00"
  />
  <TextView
    android:id="@+id/inutile2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/bottoni"
    android:text="Testo inutile sopra i Button"
    android:textSize="20sp"
    android:background="#66ffa3d2"
    android:textColor="#ffffff00"
  />
  <LinearLayout
    android:id="@+id/bottoni"
    android:layout_alignParentBottom="true"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <Button
      android:layout_height="80dp"
      android:layout_width="0dp"
      android:layout_weight="1"
      android:text="-1"
      android:id="@+id/but_minus"
      android:textSize="30sp"
      android:background="#ff66a3d2"
      android:textColor="#ffffffff"/>
    <Button
      android:layout_height="80dp"
      android:layout_width="0dp"
      android:layout_weight="3"
      android:text="Esci"
      android:id="@+id/but_esci"
      android:textSize="30sp"
      android:background="#ff25567b"
      android:textColor="#ffffffff"/>
    <Button
      android:layout_height="80dp"
      android:layout_width="0dp"
      android:layout_weight="1"
      android:text="+1"
      android:id="@+id/but_plus"
      android:textSize="30sp"
      android:background="#ff66a3d2"
      android:textColor="#ffffffff"/>
  </LinearLayout>
</RelativeLayout>"""


if __name__ == '__main__':
    main()
